package reflect;

import Service.UserService;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ResourceBundle;

/**
 * 通过反射调用方法--为了以后的灵活
 */
public class ReflectTest10 {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
        //不使用反射机制的话
       // UserService s = new UserService();
       // System.out.println(s.Login("admin","123"));

        //利用反射机制

        //1获取类
        Class c = Class.forName(ResourceBundle.getBundle("classinfo2").getString("className1"));

        //2获得其中一个方法
        //方法因存在重载 不能只通过名字 利用 名字+参数链表 String name, Class<?>... parameterTypes
       // Login(String name,String pwd)
        Method loginMethod = c.getDeclaredMethod("Login",String.class,String.class);
        Method loginMethod1 = c.getDeclaredMethod("Login",int.class);

        //3。实例化对象
        Object obj = c.newInstance();

        //4.调用 第二个参数为要传入的参数Object obj,
        //                     Object... args
        //*********最重要的方法！！！
        Object result = loginMethod.invoke(obj,"admin","123");
        System.out.println(result);







    }
}
